/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pkgapplication;

import java.io.Serializable;
import java.util.ArrayList;

/**
 *
 * @author Usager
 */
public class Application implements Serializable
{
   private Double budget;
 private int nbTotalHabitant;
 
 
 public double battle(ArrayList<UniteDeCombat> power1,ArrayList<UniteDeCombat> power2,double bonus1,double bonus2){
     //outcome ne doit pas dépasser 1. power, c'est le nombre de soldats X leur puissance et bonus...c'est les bonus cummulés...
     //outcome, c'est le pourcentage de chance de victoire,positif pour power1, negatif pour power2
     double outcome=0;
     int sens=1;
     int[] powerTab1=getTab(power1);
     int[] powerTab2=getTab(power2);
     //inégalité positive, c'est bon pour power1, négatif bon pour power2, 0 il n'y a pas d'inégalité
     double inegalityValor=getAnInegality(power1,power2);
     double realComparison=3;
     double comparison12=(((powerTab1[0]*bonus1)/(powerTab2[0]*bonus2))+((powerTab1[1]*bonus1)/(powerTab2[1]*bonus2))+((powerTab1[2]*bonus1)/(powerTab2[2]*bonus2)));
     double comparison21=(((powerTab2[0]*bonus2)/(powerTab1[0]*bonus1))+((powerTab2[1]*bonus2)/(powerTab1[1]*bonus1))+((powerTab2[2]*bonus2)/(powerTab1[2]*bonus1)));
      
     
     if(comparison12>3){
         realComparison=comparison12;
         sens=1;
        
     System.out.println("advantage for me");
     }
     else if(comparison12==3){
         
         outcome=0.5;
     }
         
     else {
         sens=-1;
         realComparison=comparison21;
         
     System.out.println("advantage for him");
     }
     outcome=(0.5+((realComparison-3)/20)+inegalityValor)*sens; 
     System.out.println(" comparison: "+realComparison+"\noutcome: "+outcome+"\ninegality: "+inegalityValor);
     //Il y a toujours de l'espoir!!! pour les fous et les chanceux... 
     if(outcome>=1){
         outcome=0.95;
     }
     else if(outcome<=-1){
         outcome=-0.95;
     }
     return outcome;
 }
 //une inégalité rend la victoire beaucoup plus facile (mettons +10%)
 //il y a inégalité si le rapport de force entre deux types identiques dépasse 4
 public double getAnInegality(ArrayList<UniteDeCombat> power1,ArrayList<UniteDeCombat> power2){
     int[] tab1=getTab(power1);
     int[] tab2=getTab(power2);
     double inegality=0;
     for(int x=0;x<tab1.length;x++){
         if((tab1[x]/tab2[x])>=4){
             inegality=inegality+0.10;
         }
         else if((tab2[x]/tab1[x])>=4){
             inegality=inegality-0.10;
         }
     }
     
     return inegality;
 }
 public int[] getTab(ArrayList<UniteDeCombat> power){
     int[] tab={0,0,0};
     for(UniteDeCombat u:power){
         if(u.getType()==0){
             tab[0]++;
         }else if(u.getType()==1){
             tab[1]++;
         }
         else if(u.getType()==2){
             tab[2]++;
         }
     }
     return tab;
 }
 public int getTotalPower(ArrayList<UniteDeCombat> power){
     int i=0;
     for(UniteDeCombat u:power){
         i=i+u.getForceBrute();
     }
     return i;
 }
}
